﻿using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Security.Cryptography;

    public partial class Inicio : Form
    {  
        public WList smsCurse;
        public bool smsActivado=false;
        public bool smsRecurso=false;
        public bool nuevosMensajes=false;
        private bool subcrito = false;

        public bool sincronisoRecursos = false; 
        public int TimeEvent=0;
        public XMLUT x;
        public Brain tm=null;
        public bool conectado=true;
        public ArrayList conf;
        public System.Timers.Timer count;
        public Timmer tn;
        public string userID = null;
        public Connection c;

        
        public Inicio()
        {

            InitializeComponent();
            this.ShowInTaskbar = false;
            this.conectado = false;
            //this.count = new System.Timers.Timer(1000);
            //this.count.Elapsed += new System.Timers.ElapsedEventHandler(count_Elapsed);
            //this.count.Start();
           
            x = new XMLUT();
            conf = new System.Collections.ArrayList();
            Application.ApplicationExit += new EventHandler(Application_ApplicationExit);
            conf = x.ReadConfig();

             ///creo el timer

            this.textBox1.Text = conf[0].ToString();
            this.textBox2.Text = conf[1].ToString();

            if (conf[2].ToString() == "Yes")
            {
                this.Recordar.Checked = true;
            }
            this.Show();

            
                Application.DoEvents();
            
        }

        void Application_ApplicationExit(object sender, EventArgs e)
        {   
            this.GuardarTimer();
        }

        void count_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            
            //if (this.tm != null && this.conectado)
            //{


            //    this.notifyIcon1.Text = "Estado: Revisando Webcursos";

            //    this.count.Stop();
            //    this.tm.Up(this.smsActivado, conf[4].ToString(), conf[5].ToString(), conf[8].ToString(), false, conf[6].ToString(), conf[7].ToString());


            //    this.count.Interval = 10000000;
            //    if (this.sincronisoRecursos)
            //    {
            //        this.tm.BajaRecursos(this.tm.Cursos);
            //        this.sincronisoRecursos = false;
            //    }
            //    this.count.Start();
                
            //}
            //if (TipoIcono == 1)
            //{
            //    this.notifyIcon1.Text = "Estado: Stand By";
            //}

        }

        private void Entrar_Click(object sender, EventArgs e)
        {
                        
            Hide();
            CheckSubscripcion();

            if (subcrito)
            {
                ArrayList conf = new ArrayList();
                conf = x.ReadConfig();


                if (this.Recordar.Checked == true)
                {
                    x.WriteConfig(this.textBox1.Text, this.textBox2.Text, "Yes", "Yes", conf[4].ToString(), conf[5].ToString(),
                        conf[6].ToString(), conf[7].ToString(), conf[8].ToString());
                }
                if (this.Recordar.Checked == false)
                {
                    x.WriteConfig(this.textBox1.Text, "", "No", "Yes", conf[4].ToString(), conf[5].ToString(),
                        conf[6].ToString(), conf[7].ToString(), conf[8].ToString());
                }


                //Aca habría que crear un nuevo timer y hacer toda la conneción que tu haces junto con mostrar los pop-up
                //Ahora si debiera funcionar, cuando iniclices el timmer que se llame "tm" pa que sea concordante con mi codigo, ve las funciones que agregue a esta clase
                //textBox1 es el textbox que contiene el nombre de usuario
                //textBox2 contienen la contraseña pa que se la entregui a la función donde inicias las sesión
                //recuerda llamar a los pop-up pa mostrar las ventanas cuando sea necesario.

                if (this.textBox1.Text == conf[0].ToString()) //Si el usuario es el mismo que el de la configuracion, quiere decir que ya se conecto antes!!!
                {
                    LoadTimer();

                }
                if (this.textBox1.Text != conf[0].ToString())
                {
                    if (this.conectado == true)
                    {
                        this.tm = new Brain(this.count, conf[0].ToString(), conf[1].ToString());
                    }
                }

                if (SMS.Checked == true)
                {
                    this.smsActivado = true;
                }

                this.tm.Up(this.smsActivado, conf[4].ToString(), conf[5].ToString(), conf[8].ToString(), true, conf[6].ToString(), conf[7].ToString());
            }
        }

        private void Cerrar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void Config_Click(object sender, EventArgs e)
        {
            Wnotifier.Configuracion cp = new Wnotifier.Configuracion();
            if (this.tm != null)
            {
                
                cp.Agrega(ref this.tm.Cursos); 
            
            
            }
             
            cp.ShowDialog();

            if (this.tm != null)
            {

                cp.Agrega(ref this.tm.Cursos);
            }
        }

        private void WC_Link_Click(object sender, EventArgs e)
        {
            System.Diagnostics.Process.Start("IExplore.exe","http://webcursos.uai.cl");
        }

        private void GuardarTimer() //metodo para guardar clase (Serializarla)
         {
             System.Runtime.Serialization.Formatters.Binary.BinaryFormatter frt = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();

             System.IO.FileStream stm = null;

             if (this.tm != null)
             {
                 try
                 {
                     if (File.Exists("\\Webcursos\\Cursos.bin") == true)
                     { File.SetAttributes("\\Webcursos\\Cursos.bin", FileAttributes.Normal); }

                     stm = new FileStream("\\Webcursos\\Cursos.bin", System.IO.FileMode.Create);

                     if (conf[0].ToString() != "" && conf[1].ToString() != "")
                     { frt.Serialize(stm, this.tm); }
                     stm.Close();

                     File.SetAttributes("\\Webcursos\\Cursos.bin", FileAttributes.Hidden);

                 }

                 catch (System.Exception ex)
                 {

                     MessageBox.Show(ex.ToString());

                 }
             }
            
         }

        private void LoadTimer()
         {

             System.Runtime.Serialization.Formatters.Binary.BinaryFormatter frt = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
            
             System.IO.FileStream stm =null;

             try
             {
                 if (System.IO.Directory.Exists("\\Webcursos\\Cursos.bin") == true)
                 {
                     File.SetAttributes("\\Webcursos\\Cursos.bin", FileAttributes.Normal);
                 }

                 stm= new FileStream("\\Webcursos\\Cursos.bin", System.IO.FileMode.Open);
                 
                 this.tm = (Brain) frt.Deserialize(stm);
                 stm.Close();

                 File.SetAttributes("\\Webcursos\\Cursos.bin", FileAttributes.Hidden);
             }

             catch (System.Exception ex)
             {
                 if (System.IO.File.Exists("\\Webcursos\\Config.xml") == true)
                 {
                     MessageBox.Show("No se encontró la  configuración de tu sesión, se volverán a cargar tus cursos y sus recursos.","Webcursos Notifier");
                     this.tm = new Brain(this.count, conf[0].ToString(), conf[1].ToString());
                 }
             }
         }

        private void Cancel_Click(object sender, EventArgs e)
        {
            this.Hide();
            this.notifyIcon1.Text = "No conectado";
        }

        private void Conect_Click(object sender, EventArgs e)
        {
            if (conectado == false)
            {
                this.Show();
            }
        }

        private void Cerrando(object sender, FormClosingEventArgs e)
        {
            GuardarTimer();
            notifyIcon1.Visible = false;
        }

        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
           
        }

        private void Recordar_CheckedChanged(object sender, EventArgs e)
        {

        }

        private void sincronizarToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (subcrito)
            {   MessageBox.Show(@"Tus cursos se descargarán a C:\Webcursos");
                if (!this.notifyIcon1.Text.Contains("Revisando"))
                {
                    this.tm.BajaRecursos(this.tm.Cursos);
                }
                else
                {
                    this.sincronisoRecursos = true;
                }
            }
            else
            {
                MessageBox.Show("Tu Subscripción a Webcursos Notifier se encuentra vencida, renuevala para seguir disfrutando de este programa", "Subscripción Vencida");
            }
        }

        private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {

        }

        private void revisarWebcursosToolStripMenuItem_Click(object sender, EventArgs e)
        {
           
            if (subcrito)
            {
                if (this.tm != null)
                {
                    this.tm.estado = true;
                    this.notifyIcon1.Text = "Estado: Revisando Webcursos";
                  
                    this.tm.estado = false;
                    this.tm.Up(this.smsActivado, conf[4].ToString(), conf[5].ToString(), conf[8].ToString(), true, conf[6].ToString(), conf[7].ToString());

                  
                    if (this.sincronisoRecursos)
                    {
                        this.tm.BajaRecursos(this.tm.Cursos);
                    }
                    

                }
            }
            else
            {
                MessageBox.Show("Tu Subscripción a Webcursos Notifier se encuentra vencida, renuevala para seguir disfrutando de este programa", "Subscripción Vencida");
            }
            this.notifyIcon1.Text = "Estado: Stand By";
        }

        private void pictureBox1_Click(object sender, EventArgs e)
        {

        }

        private void SmsTip_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Solo para celulares movistar,por ahora. Configura Wnotifier para que recibas en tu celular un mensaje cada vez que se agregue un nuevo recurso en Webcurso." +
                " Solo dirígite a Configuración y introduce el número de origen, número de destino y tu contraseña. **Para utilizar este servicio debes tener un celular movistar" +
                " y tener habilitado el servicio para mandar mensajes a través de su página web, infórmate en www.movistar.cl",
                "Mensajería Sms (Solo Movistar)", MessageBoxButtons.OK, MessageBoxIcon.Question);
        }

        private void últimasDescargasToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (tm != null)
            {
                tm.Show_Ult_Descargas();
            }
        }

        private void verRecursosToolStripMenuItem_Click(object sender, EventArgs e)
        {
            System.Diagnostics.Process.Start("\\Webcursos");
        }

        private void nuevoSemestreToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Wnotifier.NuevoSemestre n = new Wnotifier.NuevoSemestre();
            n.ShowDialog();
        }

        public  string ComputeHash(string Text,string year)
        {
            string Text2 = Text + "ATCI" + year ;
            byte[] TextByte = Encoding.UTF8.GetBytes(Text2);

            HashAlgorithm hash = new SHA1Managed();

            byte[] HashBytes = hash.ComputeHash(TextByte);

            string HashValue = Convert.ToBase64String(HashBytes);

            return (HashValue);
        }
        
        private void CheckSubscripcion()
        {
            notifyIcon1.Text = "Chekeando Subscripción";

            this.c = new Connection(this.textBox1.Text, this.textBox2.Text);
            
            if (this.userID == "")
            {

                this.userID = this.c.VarUsingParsing("http://webcursos.uai.cl/index.php", @"\/user\/view\.php\?id\=([0-9]+)");

            }

            if (this.c.VarUsingParsing("http://webcursos.uai.cl/user/edit.php?id=" + this.userID + "&course=1", @"alt\=[^\w]" + "ID Yahoo" + @"[^\w].* value\=[^\w](.{28})[^\w]") != this.ComputeHash(this.textBox1.Text,this.c.GetYear()))
            {
                subcrito = false;
                notifyIcon1.Icon = Wnotifier.Properties.Resources.Icon_subcrip_venc;
                notifyIcon1.Text = "Subscripción Vencida";
                subcrito = false;
                conectado = true;
                //MessageBox.Show("Su sucripción ha vencido.Si desea renovarla, visite www.wnotifier.cl");
                //Application.Exit();
                
            }  
            else{
            subcrito = true;
            conectado = true;
            }
            if (subcrito)
            {
                notifyIcon1.Text = "Stand By";
            }
        }

        private void MenuStrip_OnLoad(object sender, CancelEventArgs e)
        {
            if (conectado)
            {
                this.contextMenuStrip1.Items["Conect"].ForeColor = Color.Gray;
            }
        }
    }